XSS (Cross-Site Scripting) এবং Clickjacking হল দুটি সাধারণ ওয়েব নিরাপত্তা সমস্যা যা আপনার অ্যাপ্লিকেশনকে ঝুঁকিতে ফেলতে পারে। Spring Security তে এই সমস্যাগুলোর সুরক্ষা নিশ্চিত করার জন্য সহজ এবং কার্যকর কনফিগারেশন প্রদান করা হয়। এখানে আমরা দেখব কীভাবে Spring Security তে XSS এবং Clickjacking-এর বিরুদ্ধে সুরক্ষা কনফিগার করা যায়।
1. XSS (Cross-Site Scripting) Protection
XSS আক্রমণ ঘটতে পারে যখন একজন আক্রমণকারী ক্ষতিকারক স্ক্রিপ্ট কোড সরাসরি ব্যবহারকারীর ব্রাউজারে ইনজেক্ট করে। এটি সাধারণত ফর্ম ইনপুট, URL প্যারামিটার বা কুকির মাধ্যমে ঘটে। XSS রোধের জন্য, Spring Security অটোমেটিকভাবে স্ক্রিপ্ট ইনজেকশন প্রতিরোধ করে, কিন্তু কিছু ক্ষেত্রে আপনি এটি কাস্টমাইজ করতে পারেন।
Spring Security তে XSS Protection কনফিগারেশন
Spring Security তে XSS রোধ করার জন্য, আপনি HttpSecurity কনফিগারেশন ব্যবহার করতে পারেন। সাধারণত, Spring Security XSS-এর বিরুদ্ধে Content Security Policy (CSP), HTTP Headers, এবং Sanitization ব্যবহার করে সুরক্ষা প্রদান করে।
Step 1: Content Security Policy (CSP) ব্যবহার করা
CSP হল একটি নিরাপত্তা বৈশিষ্ট্য যা XSS আক্রমণ প্রতিরোধে সাহায্য করে। CSP দ্বারা আপনি ব্রাউজারকে নির্দেশ দিতে পারেন কোন সোর্স থেকে কনটেন্ট লোড করা যাবে।
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.headers()
.contentSecurityPolicy("default-src 'self'") // CSP সেট করা হচ্ছে
.and()
.formLogin()
.permitAll();
return http.build();
}
}
Explanation:
contentSecurityPolicy("default-src 'self'"): এই CSP পলিসি শুধুমাত্র ঐ সাইটের নিজের সোর্স থেকে কনটেন্ট লোড করার অনুমতি দেয়। এতে করে বহিরাগত সোর্স থেকে স্ক্রিপ্ট বা অন্য কোন কনটেন্ট ইনজেকশন প্রতিরোধ করা হয়।
Step 2: XSS Filter
Spring Security XSS filter স্বয়ংক্রিয়ভাবে ইনপুট ভ্যালিডেশন এবং ইনপুটকে স্যানিটাইজ করে। আপনি একটি কাস্টম XSSFilter তৈরি করতে পারেন যদি আপনি আরও কাস্টম লজিক চান।
import org.springframework.web.filter.OncePerRequestFilter;
import javax.servlet.FilterChain;
import javax.servlet.Filter;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
public class XSSFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, javax.servlet.http.HttpServletResponse response, FilterChain chain)
throws ServletException, IOException {
// কাস্টম ইনপুট স্যানিটাইজেশন লজিক
// উদাহরণ: request এর প্যারামিটারগুলো স্যানিটাইজ করা হতে পারে
String sanitizedRequest = request.getParameter("userInput");
request.setAttribute("sanitizedInput", sanitizedRequest); // স্যানিটাইজড ইনপুট ব্যবহার করা হচ্ছে
chain.doFilter(request, response); // পরবর্তী ফিল্টারে রিকোয়েস্ট পাঠানো
}
}
Explanation:
XSSFilterকাস্টম ইনপুট স্যানিটাইজেশন প্রক্রিয়া তৈরি করে যাতে যে কোন ইউজার ইনপুট থেকে স্ক্রিপ্ট কোড সরিয়ে ফেলা হয়।
2. Clickjacking Protection
Clickjacking হল একটি আক্রমণ যেখানে আক্রমণকারী একটি ফ্রেমে একটি পেজ লোড করে এবং ব্যবহারকারী যখন পেজে ক্লিক করে, তখন আসলে সেই ক্লিক অন্য একটি হিডেন রিসোর্সের উপর চলে যায়। এটি আপনার অ্যাপ্লিকেশন বা ওয়েবসাইটের নিরাপত্তার জন্য মারাত্মক হতে পারে।
Spring Security-তে Clickjacking প্রতিরোধের জন্য X-Frame-Options হেডার ব্যবহার করা হয়, যা একটি পেজকে অন্য কোন পেজে ইনক্লুড বা ফ্রেমে লোড হতে বাধা দেয়।
Step 1: X-Frame-Options Header ব্যবহার করা
X-Frame-Options হেডারটি ব্যবহার করে Clickjacking থেকে সুরক্ষা পেতে পারেন।
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.headers()
.frameOptions().sameOrigin() // Clickjacking protection
.and()
.formLogin()
.permitAll();
return http.build();
}
}
Explanation:
frameOptions().sameOrigin(): এই কনফিগারেশন সেটিং কেবলমাত্র সাইটটির নিজের সোর্স থেকে ফ্রেমে পেজ লোড করতে দেয়, অর্থাৎ অন্য কোন সাইটে আপনার অ্যাপ্লিকেশন ফ্রেমে লোড করা যাবে না। এটি Clickjacking আক্রমণ প্রতিরোধ করে।
Step 2: X-Frame-Options হেডার কাস্টমাইজ করা
আপনি DENY বা SAMEORIGIN এর পরিবর্তে কাস্টম হেডার মূল্যও ব্যবহার করতে পারেন।
- DENY: এই অপশনটি আপনার পেজকে সম্পূর্ণভাবে অন্য কোনো ফ্রেমে লোড হতে বাধা দেয়।
- SAMEORIGIN: এই অপশনটি শুধুমাত্র একই ডোমেইন থেকে ফ্রেমে পেজ লোড করার অনুমতি দেয়।
http
.headers()
.frameOptions().deny() // পুরোপুরি Clickjacking প্রতিরোধ
উপসংহার
Spring Security-তে XSS এবং Clickjacking Protection কনফিগার করার জন্য কিছু সাধারণ এবং কার্যকরী পদ্ধতি রয়েছে:
- XSS Protection:
Content Security Policy (CSP)ব্যবহার করে স্ক্রিপ্ট ইনজেকশন থেকে রক্ষা করা যায়। আপনি কাস্টম XSS ফিল্টারও যোগ করতে পারেন যা ইনপুট স্যানিটাইজেশন প্রক্রিয়া করবে। - Clickjacking Protection:
X-Frame-Optionsহেডার ব্যবহার করে অ্যাপ্লিকেশনকে Clickjacking আক্রমণ থেকে রক্ষা করা সম্ভব।
এগুলি আপনার অ্যাপ্লিকেশনের নিরাপত্তা বাড়ানোর জন্য অত্যন্ত গুরুত্বপূর্ণ এবং Spring Security এগুলোর জন্য শক্তিশালী সমাধান প্রদান করে।
Read more